<h2>开发模式</h2>
<p>我们可以将整个系统看作一套功能模块集合，不同模块负责不同功能，不同开发人员负责不同模块，各个模块进行高内聚低耦合的开发方式，再通过系统接口进行整合，来提高开发效率与降低程序耦合度与易读性，达到即插即的应用式开发。</p>
<p>示例图解 - 以简单的公司系统为例子</p>
<img class="uk-thumbnail" src="__ROOT__app/dev/resources/images/app.png" alt="">
<h2>模块说明</h2>
<p>应用目录位于系统中的 <code>app</code> 目录下，系统中自带 <code>base</code> 基础模块、<code>system</code> 系统框架模块、<code>dev</code> 开发工具 三大模块，除<code>dev</code>模块，其他两个模块为必要模块。开发时您可以继承基础模块与系统框架模块中的类，但是请勿修改这两个模块中的任何代码，您可以在自己开发模块中定义自己的继承类。</p>
<p>每个模块拥有以下应用层</p>
<img class="uk-thumbnail" src="__ROOT__app/dev/resources/images/app2.png" alt="">
<h3>控制器</h3>
<p>负责系统中的逻辑操作，可通过URL进行访问</p>
<h3>模型</h3>
<p>负责系统中的数据处理与调用</p>
<h3>视图</h3>
<p>负责系统中的模板显示</p>
<h3>应用配置</h3>
<p>储存配置文件来设置应用信息</p>
<h3>服务层</h3>
<p>服务于系统模块之间的接口，负责模块接口数据返回，如菜单、权限等数据</p>
<h2>基本结构</h2>
<p>只说明基础模块结构</p>
<pre>
/framework [框架目录]
 |
/data [数据目录]
 ├─cache --------------------------------[缓存目录]
 ├─config -------------------------------[系统配置]
 |
/app [模块目录]
 ├─base ---------------------------------[基础模块]
 │  ├─controller ------------------------[控制器]
 │  │  ├─BaseController.php -------------[基础控制器]
 │  │  ├─ErrorController.php ------------[错误处理模块]
 │  ├─hook ------------------------------[钩子]
 │  │  ├─AppHook.php --------------------[框架运行接口]
 │  │  ├─DbHook.php ---------------------[数据库执行接口]
 │  │  ├─TempalteHook.php ---------------[模板标签接口]
 │  ├─model -----------------------------[模型]
 │  │  ├─BaseModel.php ------------------[基础模型类]
 │  ├─view ------------------------------[模板]
 │  │  ├─error_development.html ---------[调试错误显示模板]
 │  │  ├─error_production.html ----------[上线错误显示模板]
 │  ├─util ------------------------------[工具]
 │  │  ├─Function.php -------------------[扩展函数]
 ├─system -------------------------------[系统模块]
 │  ├─controller ------------------------[控制器]
 │  │  ├─FunctionsController.php --------[应用管理]
 │  │  ├─IndexController.php ------------[系统首页]
 │  │  ├─LoginController.php ------------[系统登录]
 │  │  ├─ManageController.php -----------[系统管理]
 │  │  ├─SettingController.php ----------[系统设置]
 │  │  ├─SystemController.php -----------[基础控制器]
 │  │  ├─SystemLogController.php --------[系统日志]
 │  │  ├─SystemUserController.php -------[系统用户]
 │  │  ├─SystemUserGroupController.php --[系统角色]
 │  │  ├─UeditorController.php ----------[百度编辑器处理]
 │  │  ├─UploadController.php -----------[上传提交]
 │  ├─model -----------------------------[模型]
 │  │  ├─AdminLogModel.php --------------[日志数据]
 │  │  ├─FunctionsModel.php -------------[应用数据]
 │  │  ├─ManageModel.php ----------------[系统数据]
 │  │  ├─MenuModel.php ------------------[菜单数据]
 │  │  ├─SystemConfigModel.php ----------[配置模型]
 │  │  ├─SystemFileModel.php ------------[文件模型]
 │  │  ├─SystemGroupModel.php -----------[角色模型]
 │  │  ├─SystemLogModel.php -------------[日志模型]
 │  │  ├─SystemUserModel.php ------------[用户模型]
 │  ├─view ------------------------------[模板]
 │  │  ├─ 模板参考控制器路径方法
 │  ├─conf ------------------------------[工具]
 │  │  ├─Function.php -------------------[扩展函数]
 │  ├─service ---------------------------[系统服务]
 │  │  ├─Function.php -------------------[扩展函数]
 |
\public [公共资源目录]
\index.php [入口文件]
</pre>
<h2>常用函数</h2>
<p>保护过滤与模块之间的交互函数，请参考 <code>Function.php</code> 文件</p>
<pre>
/**
 * URL生成
 * @param  string $route  地址，"模块名称/控制器名/方法名"
 * @param  array  $params 参数数组
 * @return string
 */
function url($route = null, $params = array());

/**
 * GET、POST过滤获取
 * @param  string $str      键名，如：id 或者 post.id
 * @param  [type] $default  默认值，当数据不存在是默认填充
 * @param  [type] $function 数据处理函数
 * @return string
 */
request($str, $default = null, $function = null);

/**
 * 读取模块配置
 * @param string $file 配置文件路径或当前模块配置文件名
 * @return array
 */
function load_config($file);

/**
 * 模块层对象调用函数
 * @param string $str   调用路径，如："system/Menu"
 * @param string $layer 调用层 默认model
 * @return objcet       返回对象操作，相当于 new app\system\model\Menu();
 */
function target($str, $layer = 'model');
</pre>
<script>
    Do.ready('pre', function () {
        $("pre").addClass("prettyprint");
        prettyPrint();
    });
</script>